﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace AccesoDatos
{
    public class dBASE
    {
        /************************************ A T R I B U T O S ************************************/
        // Probeedor de datos Cadena de conexion
        public const String PROVIDER_CONN_STRING_DBASE = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
                                                         @"Extended Properties='dBASE 5.0';";
                                            
        // Cadena Completa de conexion
        public String connStringDBase;
        
        // Tabla de datos
        private DataTable _dt;

        // Conexión con el origen de datos.                
        OleDbConnection cnn;
        
        /******************************** C O N S T R U C T O R E S *******************************/
        public dBASE(string path_Dir_Db)
        {            
            // Definimos la cadena de conexion
            connStringDBase = PROVIDER_CONN_STRING_DBASE + @"Data Source=" + path_Dir_Db;
            // Creamos una conexion para la cadena 
            cnn = new OleDbConnection(connStringDBase);
        }


        /************************************** M E T O D O S *************************************/
        public DataTable GetDataDBase(string file_Db_sinExtencion)
        {
            return this.GetDataDBase(file_Db_sinExtencion, "*");
        }

        public DataTable GetDataDBase(string file_Db_sinExtencion, string proyección)
        {
            try
            {   
                // Consulta SQL de selección 
                String sql = "SELECT " + proyección + " FROM [" + file_Db_sinExtencion + "#dbf]";

                // Creamos el adaptador de datos.                
                OleDbDataAdapter da = new OleDbDataAdapter(sql, cnn);

                // Añadimos información sobre la clave principal de la tabla.                
                da.MissingSchemaAction = MissingSchemaAction.AddWithKey;

                // Creamos un nuevo objeto DataTable.                
                DataTable dt = new DataTable(file_Db_sinExtencion);

                // Rellenamos el objeto DataTable.
                da.Fill(dt);

                // Referencio el data table para la clase
                _dt = dt;

                // Devolvemos el objeto DataTable.                
                return dt;
            }
            catch (Exception)
            {
                // Devolvemos la excepción al procedimiento llamador.
                //           
                throw;
            }
        }

        public Int32 ExecuteAction(OleDbCommand cmd)
        {

            try
            {
                var cnn = new OleDbConnection(connStringDBase);

                cmd.Connection = cnn;
                cnn.Open();

                // Devolvemos el número de registros afectados.                
                return cmd.ExecuteNonQuery();
            }
            catch (Exception)
            {
                // Devolvemos la excepción al procedimiento llamador.
                //           
                throw;
            }
        }
    }
}
